<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    /**
     * prototype
     * 原型对象可以挂载函数，对象实例化不会多次创建原型上函数，节约内存
     * 不变的方法，直接定义在 prototype 对象上，这样所有对象的实例就可以共享这些方法。
     * 构造函数和原型对象中的this 都指向实例化的对象
     *
     * 先在当前实例对象是查找，然后再去原型对象查找，并且原型对象被所有实例共享
     */
    function Person() {
        // 此处定义同名方法 sayHi
        this.sayHi = function () {
            console.log('嗨!');
        }
    }
    // 为构造函数的原型对象添加方法
    Person.prototype.sayHi = function () {
        console.log('Hi~');
    }
    let p1 = new Person();
    p1.sayHi(); // 输出结果为 嗨!
</script>
</body>
</html>